package psn.kiko.mapper.business.system;

import org.apache.ibatis.annotations.Mapper;
import psn.kiko.annotation.sql.CommonFiledAutoSet;
import psn.kiko.annotation.sql.NeedCommonFiledAutoSet;
import psn.kiko.enumeration.DataBaseOperationType;
import psn.kiko.pojo.entity.system.OperationEntity;
import psn.kiko.pojo.entity.system.UserEntity;
import psn.kiko.pojo.vo.LabelValue;
import psn.kiko.pojo.vo.OperationVO;
import psn.kiko.pojo.vo.ui.NavigationGroupUI;

import java.util.List;

/**
 * 导航项操作DAO
 */
@Mapper
public interface OperationMapper{
	/**
	 * 根据导航项id查询其操作列表
	 * */
	List<OperationVO> selectListByNavItemId(Integer navItemId);
	
	/**
	 * 插入操作，通过AOP自动设置创建时间、创建者id、更新时间、更新者id
	 * */
	@CommonFiledAutoSet(DataBaseOperationType.INSERT)
	Integer insert(@NeedCommonFiledAutoSet OperationEntity operationEntity);
	
	/**
	 * 更新操作，通过AOP自动设置更新时间、更新者id
	 * */
	@CommonFiledAutoSet(DataBaseOperationType.UPDATE)
	Integer updateById(@NeedCommonFiledAutoSet OperationEntity operationEntity);
	
	/**
	 * 根据id批量删除操作
	 * */
	Integer batchDeleteById(List<Integer> ids);
	
	/**
	 * 根据id修改一批操作的状态
	 * */
	Integer updateStatusByIds(List<Integer> ids,Short status);
	
	/**
	 * 通过id查询操作
	 * */
	OperationVO selectById(Integer id);
	
	/**
	 * 通过逻辑外键批量删除操作：删除一批导航的操作
	 * */
	Integer batchDeleteByNavId(List<Integer> navIds);
	
	/**
	 * 获取所有接口选项
	 * */
	List<LabelValue> selectAllInterfaceSelection();
	
	/**
	 * <p style="color:red;font-size:14px">查询用户的可用UI权限</p>
	 * <p>含有全部导航层级与操作，每个导航及操作须计算出最终是否可用</p>
	 * */
	List<NavigationGroupUI> selectAvailableUIAuthsOfUser(UserEntity userEntity);
}
